package com.lottery.material.dao.portaluser;

import com.lottery.material.pojo.page.Page;
import com.lottery.material.pojo.page.PageData;
import com.lottery.material.pojo.portaluser.PortalUserInfo;
import com.lottery.material.pojocustom.portaluser.PortalUserInfoCustom;
import com.lottery.material.vo.portal.article.ArticleUserVo;
import com.lottery.material.vo.portal.transaction.EarnRecordStatisticsVo;
import com.lottery.material.vo.portal.user.AccountAndSecurityVo;
import com.lottery.material.vo.portal.user.AuthenticationUserVo;
import com.lottery.material.vo.portal.user.FollowUserVo;
import com.lottery.material.vo.portal.user.UserVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @description 前端用户信息Mapper
 * @author rambo
 * @date 2019年4月11日 下午9:28:05
 */
@SuppressWarnings("JavaDoc")
public interface PortalUserInfoMapper {
	
    Integer deleteByPrimaryKey(Integer id);

    Integer insert(PortalUserInfo record);

    Integer insertSelective(PortalUserInfo record);

    PortalUserInfo selectByPrimaryKey(Integer id);

    Integer updateByPrimaryKeySelective(PortalUserInfo record);

    Integer updateByPrimaryKey(PortalUserInfo record);

    /**
     * description：根据注册方式以及用户状态查询前端用户列表信息
     * user 朱正磊
     * time 2019-04-22 14:15
     * @param logonMode 注册方式（1：前台正常流程注册；2：后台运营人员注册）
     * @param userStatus 用户状态（1：正常；2：永久封禁；3：已删除）
     * @return 返回前端用户列表信息
     */
    List<PortalUserInfoCustom> findPortalUserInfoByLogonMode(@Param("logonMode") Integer logonMode, @Param("userStatus") Integer userStatus);

    /**
     * description：查询扩展类分页列表
     * user 朱正磊
     * time 2019-04-17 17:01
     * @param page 分页对象
     * @return 返回扩展类分页列表数据
     */
    List<PortalUserInfoCustom> findCustomListPage(Page page);

    /**
     * description：根据主键查询唯一扩展类数据
     * user 朱正磊
     * time 2019-04-17 17:03
     * @param id 主键
     * @return 返回唯一扩展类数据
     */
    PortalUserInfoCustom findCustomById(Integer id);

    /**
     * description：批量禁用、启用
     * user 朱正磊
     * time 2019-04-24 16:37
     * @param data 主键集合以及是否禁用状态Map
     * @return 返回持久化操作数据库状态值
     */
    Integer updateBatchBanOrNot(Map<String, Object> data);

    /**
     * description：查询扩展类列表（用于导出Excel）
     * user 朱正磊
     * time 2019-04-26 17:25
     * @param pd 参数封装对象，其实本质上是一个Map
     * @return 返回扩展类列表数据
     */
    List<PortalUserInfoCustom> selectListAll(PageData pd);

    /**
     * description：根据id集合进行查询多条扩展类数据（用于导出Excel）
     * user 朱正磊
     * time 2019-04-26 17:25
     * @param ids 主键集合
     * @return 返回扩展类列表数据
     */
    List<PortalUserInfoCustom> selectListByIds(List<Integer> ids);

    /**
     * description：根据用户昵称查询数据集合
     * user 朱正磊
     * time 2019-04-28 16:42
     * @param nickName 用户昵称
     * @param id 主键
     * @return 返回数据集合
     */
    List<PortalUserInfo> findByNickName(@Param("nickName") String nickName, @Param("id") Integer id);

    /**
     * description：根据登录手机号查询数据集合
     * user 朱正磊
     * time 2019-04-28 16:42
     * @param loginPhoneNumber 登录手机号
     * @param id 主键
     * @return 返回数据集合
     */
    List<PortalUserInfo> findByLoginPhoneNumber(@Param("loginPhoneNumber") String loginPhoneNumber, @Param("id") Integer id);

    PortalUserInfo findByLoginPhoneNumberAndUserStatusNot(@Param("phoneNumber") String phoneNumber, @Param("userStatus") Integer userStatus);

    PortalUserInfo findByUserId(String userId);

    /**
     * 查我的用户信息
     * @Author 焦阳
     * @param userId
     * @return
     */
    UserVo findMyPortalUserInfoDtoByUserId(String userId);

    /**
     * 查他人的用户信息
     * @Author 焦阳
     * @param hisUserId
     * @return
     */
    Map<String,Object> findPortalUserInfoDtoByUserId(String hisUserId);

    ArticleUserVo findArticleUserVoByUserId(String userId);


    /**
     * description: 更新用户关注数
     * author sunny
     * createDate 2019-04-15 下午 3:33
     * @param userId
     * @param isFollow
     * @return
     */
    Integer updateFollowTotal(@Param("userId") String userId, @Param("isFollow") String isFollow);

    /**
     * description: 更新用户粉丝数
     * author sunny
     * createDate 2019-04-25 下午 1:57
     * @param userId
     * @param isFans
     * @return
     */
    Integer updateFansTotal(@Param("userId") String userId, @Param("isFans") String isFans);

    /**
     * 查询关注列表
     * @Author 焦阳
     * @param map
     * @return
     */
    List<FollowUserVo> findFollowUserListByUserId(@Param("params") Map<String,Object> map);

    /**
     * 查询粉丝列表
     * @Author 焦阳
     * @param map
     * @return
     */
    List<FollowUserVo> findFansUserListByUserId(@Param("params") Map<String,Object> map);

    /**
     * 查询个人财富
     * @Author 焦阳
     * @param userId
     * @return
     */
    Map<String, Object> findMyTreasure(String userId);

    /**
     * 查询余额
     * @Author 焦阳
     * @param userId
     * @return
     */
    Map<String, Object> findRemainGold(String userId);

    /**
     * 查询常规认证
     * @param userId
     * @return
     */
    AuthenticationUserVo findUserAuthentication(String userId);

    /**
     * 查询个人收益
     * @Author 焦阳
     * @param userId
     * @return
     */
    EarnRecordStatisticsVo findIncomeStatisticsByUserId(String userId);

    /**
     * 账户与安全
     * @Author 焦阳
     * @param userId
     * @return
     */
    AccountAndSecurityVo findAccountAndSecurity(String userId);


    /**
     * @Author 肖拔赟
     * @Description 分页查询用户关注信息
     * @Date Created on 2019-04-26 10:33
     * @param  page
     * @return 
     */
    List<FollowUserVo> findFollowUserListPage(Page page);

    /**
     * description: 获取被推荐用户信息
     * author sunny
     * createDate 2019-05-15 上午 9:42
     * @return
     */
    List<Map<String, Object>> findRecommendUser();
}
